package cl.uchile.sti.authorization.model;

import java.io.Serializable;
import javax.persistence.*;
import java.util.ArrayList;
import java.util.List;

/**
 * Created with IntelliJ IDEA. User: Julio Villane Date: 06-12-12 Time: 09:30 AM
 */
@Entity
@NamedQueries({
    @NamedQuery(name = "Rol.getByPermiso", query = "select r from Rol r where r.permisos = :permiso")
})
@Table(name = "rol")
public class Rol extends Entidad implements Serializable {

    @Id
    @Column(unique = true, nullable = false)
    @GeneratedValue(strategy = GenerationType.IDENTITY)
    private Long id;
    
    private String nombre;
    
    private String descripcion;

    @ManyToMany(cascade = CascadeType.ALL)
    @JoinTable(
            name = "rol_permiso",
    joinColumns =
    @JoinColumn(name = "rol_id", referencedColumnName = "id"),
    inverseJoinColumns =
    @JoinColumn(name = "permiso_id", referencedColumnName = "id"))
    private List<Permiso> permisos;
    
    private boolean active = true;

    public Rol() {
    }

    public Rol(String nombre) {
        this.nombre = nombre;
    }

    @Override
    public boolean equals(Object o) {
        if (o instanceof Rol) {
            Rol rol = (Rol) o;
            if (id.equals(rol.getId())) {
                return true;
            }
        }
        return false;
    }

    public void addPermiso(Permiso permiso) {
        if (permisos == null) {
            permisos = new ArrayList<Permiso>();
        }
        permisos.add(permiso);
    }

    public Long getId() {
        return id;
    }

    public void setId(Long id) {
        this.id = id;
    }

    public String getNombre() {
        return nombre;
    }

    public void setNombre(String nombre) {
        this.nombre = nombre;
    }

    public String getDescripcion() {
        return descripcion;
    }

    public void setDescripcion(String descripcion) {
        this.descripcion = descripcion;
    }

    public List<Permiso> getPermisos() {
        return permisos;
    }

    public void setPermisos(List<Permiso> permisos) {
        this.permisos = permisos;
    }

    public boolean isActive() {
        return active;
    }

    public void setActive(boolean active) {
        this.active = active;
    }
}
